package com.company;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;

public class Main {

    // 1. 将数据保存到程序中【List】
    // 遍历输出所有数据
    // 计算语文的最高分
    // 计算数学的平均分
    // 统计男生和女生的人数
    // 根据英语成绩进行排序输出【从高到低】
    // ……………………
    //这个程序包含数据存储、遍历输出、统计分析和排序等功能。
    static ArrayList<StudentScore> studentScores
            = new ArrayList();
    public static void main(String[] args) {
        // write your code here
        ArrayList list = new ArrayList();
        //studentScores是一个静态列表，用于存储所有学生的成绩数据。
        //创建 4 个学生对象并添加到列表中，每个学生包含 ID、姓名、性别和三门课成绩。
        //将数据保存到程序中【List】
        list.add(0, studentScores.add(new StudentScore("0", "张三", "男", 90, 90, 90)));
        list.add(1, studentScores.add(new StudentScore("1", "李四", "男", 91, 91, 91)));
        list.add(2, studentScores.add(new StudentScore("2", "小红", "女", 92, 92, 92)));
        list.add(3, studentScores.add(new StudentScore("3", "小美", "女", 93, 93, 93)));
        //使用增强 for 循环遍历列表，并调用StudentScore的toString()方法输出信息。
        System.out.println("所有学生成绩数据：");
        showAll();
        int maxLanguageScore = getMaxLanguageScore();
        System.out.println("语文的最高分是: " + maxLanguageScore);
        System.out.println("计算数学的平均分为:" + calculateMathAverage());
        countGenders();
        sortByEnglish();
    }
    //遍历输出所有数据
    public static void showAll() {
        for (int i = 0; i < studentScores.size(); i++) {
            System.out.println(studentScores.get(i));
        }
    }
    //语文最高分
    //创建getMaxLanguageScore类
    //使用int max = Integer.MIN_VALUE,先给amx赋一个值;
    //使用 for 循环
    //将StudentScore对象轮流比较max
    //最后输出
    public static int getMaxLanguageScore() {
        int max = Integer.MIN_VALUE;
        for (StudentScore studentScore : studentScores) {
            if (studentScore.getLanguage() > max) {
                max = studentScore.getLanguage();
            }
        }
        return max;
    }

    // 计算数学平均分
    //创建calculateMathAverage类
    //使用isEmpty()处理可能的空列表情况
    //定义int sum = 0;
    //将StudentScore对象流转换为数学成绩
    //最后把总数学成绩除以门数
    //输出
    public static double calculateMathAverage() {
        if (studentScores.isEmpty())
            return 0;

        int sum = 0;
        for (StudentScore score : studentScores) {
            sum += score.getMath();
        }

        return (double) sum / studentScores.size();
    }

    // 统计男生和女生的人数
    //创建countGenders类
    //创建int maleCount = 0;//男
    //创建int femaleCount = 0;//女
    //使用 for 循环
    //将StudentScore对象轮流比较性别
    //男maleCount++;
    //女femaleCount++;
    //输出
    public static void countGenders() {
        int maleCount = 0;//男
        int femaleCount = 0;//女

        for (StudentScore score : studentScores) {
            if ("男".equals(score.getSex())) {
                maleCount++;
            } else {
                femaleCount++;
            }
        }

        System.out.println("\n男生人数: " + maleCount);
        System.out.println("女生人数: " + femaleCount);
    }

    // 根据英语成绩进行排序输出【从高到低】
    //创建sortByEnglish类
    //输出
    public static void sortByEnglish() {
        System.out.println("\n按英语成绩从高到低排序:");

        // 创建副本避免修改原始列表
        ArrayList<StudentScore> sortedList = new ArrayList<>(studentScores);

        // 使用自定义比较器排序
        sortedList.sort((s1, s2) -> s2.getEnglish() - s1.getEnglish());

        for (StudentScore score : sortedList) {
            System.out.println(score);
        }
    }
}
